#ifndef AVALON_JSONDATASHUTTLEFACTORY_HPP
#define AVALON_JSONDATASHUTTLEFACTORY_HPP
#include "Avalon/Serialization/DataShuttleFactory.hpp"
#include "Avalon/Serialization/JsonDeserializer.hpp"
#include "Avalon/Serialization/JsonSerializer.hpp"

namespace Avalon {
namespace Serialization {

  /*! \class JsonDataShuttleFactory
   *  \brief Implements the DataShuttleFactory using binary serialization.
   *  \author Kamal Mansouri <kranar@hotmail.com>
   */
  class JsonDataShuttleFactory : public DataShuttleFactory {
    public:

      //! Constructs a JsonDataShuttleFactory without pretty printing.
      JsonDataShuttleFactory();

      //! Constructs a JsonDataShuttleFactory.
      /*!
        \param prettyPrint <code>true</code> iff the data should be serialized
                           in a human readable format.
      */
      JsonDataShuttleFactory(bool prettyPrint);

      virtual ~JsonDataShuttleFactory();

      virtual JsonSerializer* CreateSerializer();

      virtual JsonDeserializer* CreateDeserializer();

    private:
      bool m_prettyPrint;
  };
}
}

#endif // AVALON_JSONDATASHUTTLEFACTORY_HPP
